package jnpf.file;

import jnpf.base.ActionResult;
import jnpf.base.vo.PaginationVO;
import jnpf.file.fallback.YozoApiFallback;
import jnpf.model.YozoFileParams;
import jnpf.utils.FeignName;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * 永中服务
 *
 * @author JNPF开发平台组
 * @version V3.1.0
 * @copyright 引迈信息技术有限公司（https://www.jnpfsoft.com）
 * @date  2021/4/15
 */
@FeignClient(name = FeignName.FILE_SERVER_NAME, fallback = YozoApiFallback.class)
public interface YozoApi {
    /**
     * 获取预览url
     * @param params
     * @return
     */
    @PostMapping("/getUrl")
    ActionResult getUrl(@RequestBody YozoFileParams params);

    /**
     * 上传本地文件
     * @param file
     * @return
     * @throws IOException
     */
    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE )
    ActionResult upload (@RequestPart("multipartFile") MultipartFile file) throws IOException;

    /**
     * 新建文件
     * @param fileName
     * @param templateType
     * @return
     */
    @GetMapping("/newCreate")
    ActionResult newCreate(@RequestParam("fileName") String fileName,@RequestParam("templateType") String templateType);

    /**
     * http上传文件
     * @param fileUrl
     * @return
     */
    @GetMapping("/uploadByHttp")
    ActionResult uploadByHttp(@RequestParam("fileUrl") String fileUrl);

    /**
     * 永中下载文件
     * @param fileVersionId
     * @return
     */
    @GetMapping("/downloadFile")
    String downloadFile(@RequestParam("fileVersionId")String fileVersionId);

    /**
     * 删除文件版本
     * @param fileVersionId
     * @return
     */
    @GetMapping("/deleteVersionFile")
    ActionResult deleteVersion(@RequestParam("fileVersionId")String fileVersionId);

    /**
     * 批量删除文件版本
     * @param fileVersionIds
     * @return
     */
    @GetMapping("/batchDelete")
    ActionResult batchDelete(@RequestParam("fileVersionIds")String[] fileVersionIds);

    /**
     * 在线编辑
     * @param fileVersionId
     * @return
     */
    @GetMapping("/editFile")
    ActionResult editFile (@RequestParam("fileVersionId")String fileVersionId);

    /**
     * 文档列表
     * @param pageModel
     * @return
     */
    @PostMapping("/documentList")
    ActionResult documentList(@RequestBody PaginationVO pageModel);

    /**
     * 本地同步编辑过后的文件
     * @param fileVersionId
     * @return
     */
    @GetMapping("/updateFile")
    ActionResult updateFile(@RequestParam("fileVersionId") String fileVersionId);


}
